package com.edu.service.interceptor;

import org.springframework.cglib.proxy.MethodInterceptor;
import org.springframework.cglib.proxy.MethodProxy;

import java.lang.reflect.Method;
import java.util.Date;

/*
*           cglib 动态代理使用的自定义方法拦截器 需要 实现 MethodInterceptor接口
*               1.需要传入被代理对象
*               2.在intercept方法中 使用 method.invoke(被代理对象,参数) 表示原始方法的调用。
* */
public class MyInterceptor implements MethodInterceptor {


    private Object target;//该属性表示 被代理对象

    /**
     * 通过构造方法 传入被代理对象。
     * @param target
     */
    public MyInterceptor(Object target) {
        this.target = target;
    }

    /**
     *
     * @param proxy  -> 代理对象
     * @param method ->代表要被执行的方法
     * @param args -> 方法的参数
     * @param methodProxy -> 方法代理
     * @return  代理对象执行完方法的返回值（大多诉情况应该就是 被代理对象执行方法的返回值）
     * @throws Throwable
     */
    @Override
    public Object intercept(Object proxy, Method method, Object[] args, MethodProxy methodProxy) throws Throwable {
        System.out.println(method.getName()+"开始与"+new Date());
        return method.invoke(target,args);
    }
}
